package com.example.demo.controller;


import com.example.demo.Server.LoginServer;
import com.example.demo.Server.UserServer;
import com.example.demo.entity.User;
import com.example.demo.result.Result;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;

@Controller
public class User_Controller {

    @Autowired
    private LoginServer loginServer;
    @Autowired
    private UserServer userServer;

    @PostMapping("/User_updata")
    public Result updata(@RequestBody User user)
    {
        int register = loginServer.updata(user);
        if(register == 0){
            return Result.error("更新失败");
        }

        return  Result.success();
    }


    // 在 User_Controller 中添加
    @PostMapping("/User_get_attachment")
    @ResponseBody
    public Result getUserAttachment(@RequestBody Map<String, Object> requestData) {
        try {
            Integer userId = (Integer) requestData.get("userId");
            if (userId == null) {
                return Result.error("用户ID不能为空");
            }

            // 查询用户附件地址
            String attachmentPath = userServer.Select_Attachments(userId);

            // 处理空值情况
            if (attachmentPath == null || attachmentPath.isEmpty()) {
                attachmentPath = ""; // 或者保持为null，前端做相应处理
            }

            Map<String, Object> data = new HashMap<>();
            data.put("userId", userId);
            data.put("attachments", attachmentPath);

            return Result.success(data);
        } catch (Exception e) {
            return Result.error("查询失败: " + e.getMessage());
        }
    }

    /**
     * 接收用户上传简历文件的 POST 请求
     * 请求路径：/User_updata_resume
     *
     * @param file   上传的文件，类型为 MultipartFile
     * @param userId 用户的唯一标识（用户ID）
     * @return ResponseEntity<Map<String, Object>> 返回统一格式的响应结果
     */
    @PostMapping("/User_updata_resume")
    public ResponseEntity<Map<String, Object>> uploadUserResume(
            @RequestParam("file") MultipartFile file,
            @RequestParam("userId") Integer userId,
            @RequestParam("name") String name) {

        // 创建响应数据容器
        Map<String, Object> response = new HashMap<>();

        try {
            // 验证文件和用户ID是否为空
            if (file.isEmpty() || userId == null) {
                response.put("code", 0);  // 0 表示操作失败
                response.put("msg", "文件或用户ID不能为空");
                return ResponseEntity.badRequest().body(response);  // 返回 400 错误
            }

            // 获取原始文件名，用于生成新文件名
            String originalFilename = file.getOriginalFilename();
            String extension = "";
            // 提取文件扩展名（如 .pdf、.docx）
            if (originalFilename != null && originalFilename.contains(".")) {
                extension = originalFilename.substring(originalFilename.lastIndexOf("."));
            }

            // 生成新的文件名：userId_user_时间戳.扩展名
            String newFilename = name + "_" + userId + "_" + LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy_MM_dd")) + extension;
            // 定义上传文件的存储目录
            String uploadDir = "D:\\bi_she\\file\\";
            Path uploadPath = Paths.get(uploadDir);  // 转换为 Path 对象


            // 如果目录不存在，则创建目录
            if (!Files.exists(uploadPath)) {
                Files.createDirectories(uploadPath);
            }

            // 构造完整的文件路径
            Path filePath = uploadPath.resolve(newFilename);
            String s = filePath.toString();
            User s1 = new User();
            s1.setAttachments(s);
            s1.setUserID(userId);
            userServer.Updata_Attachments(s1);
            // 将上传的文件写入磁盘
            Files.write(filePath, file.getBytes());

            // 构建返回的用户数据
            Map<String, Object> userData = new HashMap<>();
            userData.put("userID", userId);  // 用户ID
            userData.put("attachments", "D:\\bi_she\\file\\" + newFilename);  // 文件存储路径

            // 设置响应状态为成功
            response.put("code", 1);  // 1 表示操作成功
            response.put("msg", null);  // 无错误信息
            response.put("data", userData);  // 返回用户数据

            // 返回成功响应（HTTP 200）
            return ResponseEntity.ok(response);

        } catch (Exception e) {
            // 打印异常堆栈信息
            e.printStackTrace();

            // 设置失败响应信息
            response.put("code", 0);  // 0 表示操作失败
            response.put("msg", "上传失败: " + e.getMessage());  // 异常信息

            // 返回服务器内部错误（HTTP 500）
            return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(response);
        }
    }



}
